////
//// Created by grainlee on 16/9/20.
////
//
//#include <iostream>
//#include <map>
//#include <vector>
//
//using namespace std;
//
//map<string,vector<int>> n2p;//name to param
//map<string,vector<string>> n2v; //name to value
//vector<string> names;
//
//void dfs(int cur, int max, string s,vector<string> values, vector<string> &res){
//    if(cur == max){
//        res.push_back(s);
//        return;
//    }
//
//}
//
//string int2bs(int i,int N ){
//    string s = "";
//    while(i!= 0){
//        s = char(i%2+'0') + s;
//        i /= 2;
//    }
//    while (s.size()< N)
//        s = '0' + s;
//    return s;
//}
//
//string vector2s(string head, vector<string> s){
//    string res = head;
//    for (int i =0 ; i < s.size();i++){
//        res += s[i] + ",";
//    }
//    res.erase(res.size()-1);
//    return res;
//
//}
//
//vector<string> generate(string name){
//    vector<string> res;
//    vector<int> params = n2p[name];
//    vector<string> values = n2v[name];
//    if (params[0] == 0)
//        res.push_back("");
//
//    string head = name+"=";
//    vector<vector<string>> nonNegValues;
//    if (params[1] == 1){
//
//        int N = values.size();
//        for (int i = 1 ;i < (1<<N);i++){
//            string s = int2bs(i,N);
//            vector<string> tmp;
//            for (int j = 0 ;j < s.length() ;j++)
//            {
//                if (s[j] == '1')
//                    tmp.push_back(values[j]);
//            }
//
//            nonNegValues.push_back(tmp);
//        }
//    }
//    vector<vector<string>> allValues;
//    if (params[2] == 1){
//        for (int i =0 ;i < nonNegValues.size();i++){
//            vector<string> val =  nonNegValues[i];
//            for (int j = 0; j < (1<<val.size());j++){
//                string s = int2bs(j,val.size());
//                vector<string> tmp;
//                for (int k = 0 ; k < s.length();k++){
//                    if (s[k] == 1)
//                        tmp.push_back("-1"+values[j]);
//                }
//
//            }
//        }
//    }
////        dfs(0,values.size(),values,res);
//    for (int i =0 ;i < allValues.size();i++){
//        cout << vector2s(head,allValues[i]) << endl;
//    }
//
//    return res;
//
//}
//
//int main (){
//    int N;
//    char c;
//    cin >> N;
//
//    while(N--){
//        string name;
//        vector<int> p(3);
//        string line;
//        vector<string> value;
//        cin >> name >> p[0] >> p[1] >> p[2];
//        cin >> line ;
//        string tmp;
//        for (int i = 0 ;i < line.size();i++){
//            if(line[i] == ','){
//                value.push_back(tmp);
//                tmp = "";
//            }else
//                tmp += line[i];
//        }
//        value.push_back(tmp);
////        pair<string,vector<int>> p1(name,p);
////        n2p.insert(p1);
//        n2p[name] = p;
////        pair<string,vector<string>> p2(name,value);
//        //        n2v.insert(p2);
//        n2v[name] = value;
//
//        names.push_back(name);
//    }
//
//
//    for (int i = 0 ;i < names.size();i++){
//        vector<string> res;
//        res = generate(names[i]);
//    }
//
//
//
//}

#include <iostream>
#include <vector>
using namespace std;

class obj
{
public :
    obj() { cout << ">> create obj " << endl;
        aaa = 0;
    }
    obj(const obj& other) {
        cout << ">> copy create obj " << endl;
        aaa=other.aaa;
    }
    ~obj(){
        cout << "~~~" << endl;
    }
    void setaaa(){
        aaa = 1;
    }
    int getaaa(){
        return aaa;
    }
//    obj(obj&& other) { cout << ">> copy1 create obj " << endl; }
private:
    int aaa;
};

obj foo()
{
    obj b;
    b.setaaa();
//    vector<obj> c;
//    c.push_back(obj());

    cout << "---- exit foo ----" << endl;
//    b.~obj();
    return b;
}

int main()
{
//    vector<obj> k;
    obj c = foo();
    cout << c.getaaa() << endl;
//    cout << k.size() << endl;
}